CafePOS

Smart Restaurant & Cafe POS with Recipe BOM Stock Management

CafePOS adalah platform manajemen restoran, cafe, cloud kitchen, dan food court modern yang dirancang untuk mengotomasi seluruh rantai operasional F&Bβ€”mulai dari pesanan kasir, monitor dapur (KDS), meja pelanggan, program loyalitas membership, hingga kontrol stok bahan baku otomatis berbasis resep (Bill of Materials - BOM).

Aplikasi ini dibangun menggunakan arsitektur modern berbasis Laravel 13, Inertia.js, dan Vue 3 (TypeScript). Desain antarmukanya premium bergaya dashboard minimalis profesional dengan dukungan Dark Mode penuh dan skema warna aksen Cokelat Kopi (Coffee Theme).


✨ High Value & Keunggulan Sistem

CafePOS dirancang untuk mengendalikan biaya makanan (food cost) dan merapikan operasional harian cafe secara terintegrasi:

  1. Auto-Deduction Stok Bahan Baku (BOM)
    Setiap menu minuman atau makanan yang terjual (misal: Cafe Latte) otomatis memotong stok bahan baku penyusunnya secara real-time berdasarkan resep (misal: Espresso 18 gr dan Susu 200 ml). Anda terhindar dari kebocoran stok bahan mentah.
  2. Kitchen Display System (KDS) Terintegrasi
    Pesanan dari kasir langsung meluncur ke layar monitor dapur secara real-time. Staff dapur dapat mengelola antrean pesanan berdasarkan status (Pending, Cooking, Ready, Served) dengan tampilan bersih yang mendukung mode gelap penuh dan layar penuh (fullscreen).
  3. Pemberian Peran Terisolasi & Auto-Redirect
    Mengamankan titik operasional dengan Role-Based Access Control (RBAC). Saat login:
    • Kasir otomatis dialirkan ke halaman POS Cashier Terminal.
    • Kitchen Staff otomatis dialirkan ke monitor Kitchen Display System (KDS).
    • Owner/Manager dialirkan ke panel dashboard utama untuk memantau omset gabungan.
  4. Manajemen Reservasi & Meja Interaktif
    Visualisasikan status meja fisik di cafe Anda (Available, Occupied, Reserved). Lengkap dengan modul reservasi jadwal kunjungan pelanggan untuk mengamankan kapasitas meja pada jam sibuk.
  5. Promo Engine & Loyalty Point CRM
    Dorong penjualan dengan opsi promo fleksibel (Diskon Persentase, Potongan Nominal, dan BOGO). Member berhak mendapatkan akumulasi poin loyalitas yang dapat ditukarkan langsung sebagai pengurang tagihan saat checkout.
  6. Split Bill Dinamis
    Mempermudah penagihan meja grup. Pelanggan dalam satu meja dapat membayar pesanan mereka masing-masing (pisah tagihan) dengan kalkulasi subtotal dan pajak yang terhitung otomatis per bagian.

πŸš€ Fitur Utama & Modul

1. POS Terminal & Penjualan

2. Dapur & Antrean

3. Resep & Inventori

4. Multi-Outlet, Voucher & Pengaturan

5. Panduan Pengoperasian Sistem (User Guides)


πŸ“Š Alur Kerja Sistem (Workflow)

1. Alur Transaksi Kasir POS (BOM Stock Deduction)

Rendering Mermaid…
graph TD A[Kasir Input Pesanan POS] --> B{Pilih Tipe Pesanan} B -->|Dine In| C[Pilih Nomor Meja Aktif] B -->|Take Away/Delivery| D[Input Data Pelanggan/Antrean] C --> E[Checkout Transaksi & Bayar] D --> E E --> F[Kirim Request POS Checkout] F --> G[Sistem Potong Stok Bahan Baku per Item berdasarkan Resep BOM] G --> H[Catat Transaksi Baru & Beri Poin Member] H --> I[Kirim Pesanan ke Layar KDS Dapur secara Real-time]

2. Alur Pengelolaan Dapur (KDS Flow)

Rendering Mermaid…
graph TD A[Pesanan Masuk di Monitor KDS] --> B[Klik 'Mulai Masak' - Status: Cooking] B --> C[Klik 'Selesai Masak' - Status: Ready] C --> D[Klik 'Sajikan ke Meja' - Status: Served] D --> E[Item Pindah ke Tab Riwayat Selesai]

πŸ—„οΈ Struktur Database & Relasi (ERD)

Rendering Mermaid…
erDiagram outlets ||--o{ users : "hosts" outlets ||--o{ tables : "has" outlets ||--o{ transactions : "belongs_to" products ||--o{ recipes : "has_recipe" ingredients ||--o{ recipes : "recipe_base" ingredients ||--o{ stock_transactions : "logged_in" ingredients ||--o{ wastes : "wasted" ingredients ||--o{ opname_items : "audited" transactions ||--o{ transaction_items : "contains" products ||--o{ transaction_items : "sold" tables ||--o{ reservations : "booked_for" customers ||--o{ reservations : "reserves" customers ||--o{ transactions : "purchased_by"

Rincian Tabel Database Utama:

  1. users: Akun kasir, waiter, kitchen staff, manager, dan owner.
  2. outlets: Daftar cabang cafe fisik (Kemang, Senopati, dll).
  3. tables: Daftar meja makan fisik di masing-masing outlet.
  4. ingredients: Stok bahan mentah (susu, biji kopi, gula pasir, dll).
  5. products: Menu makanan/minuman yang dijual ke pelanggan.
  6. recipes: Jembatan resep (BOM) yang menentukan jumlah bahan baku per produk.
  7. transactions: Nota transaksi penjualan kasir (dine in/take away/delivery).
  8. transaction_items: Rincian item menu yang dibeli di setiap transaksi.
  9. wastes: Log pencatatan bahan baku yang terbuang/rusak.
  10. opnames: Dokumen opname berkala audit stok bahan baku fisik.
  11. settings: Pengaturan global (site name, logo, favicon, tax, service percentage).
  12. licenses: Penyimpan kunci verifikasi lisensi lokal terenkripsi.

πŸ“‚ Struktur Folder Utama Proyek

cafepos/
β”œβ”€β”€ app/                         # 🧠 LOGIKA BACKEND UTAMA (PHP)
β”‚   β”œβ”€β”€ Http/
β”‚   β”‚   β”œβ”€β”€ Controllers/         # Controller logika data & render Inertia
β”‚   β”‚   β”‚   β”œβ”€β”€ PosController.php      # POS Checkout & Auto-Deduction BOM
β”‚   β”‚   β”‚   β”œβ”€β”€ KdsController.php      # Monitor KDS dapur & update status
β”‚   β”‚   β”‚   β”œβ”€β”€ IngredientController.php  # Inventory & resep produk
β”‚   β”‚   β”‚   └── ...
β”‚   β”‚   └── Middleware/          # Filter Keamanan (CheckLicense, DemoModeMiddleware)
β”‚   β”œβ”€β”€ Models/                  # Model Eloquent Database (Relationship)
β”‚   β”‚   β”œβ”€β”€ License.php
β”‚   β”‚   β”œβ”€β”€ Product.php
β”‚   β”‚   β”œβ”€β”€ Recipe.php
β”‚   β”‚   β”œβ”€β”€ Ingredient.php
β”‚   β”‚   └── ...
β”œβ”€β”€ database/                    # πŸ—„οΈ SKEMA & SEEDER
β”‚   β”œβ”€β”€ migrations/              # Berkas migrasi pembuatan tabel database
β”‚   └── seeders/                 # Seeder master & dummy data pengujian lengkap
β”œβ”€β”€ resources/                   # 🎨 FRONTEND VUE 3 & TYPESCRIPT
β”‚   β”œβ”€β”€ css/                     # CSS & custom styling
β”‚   └── js/                      # Kode Vue 3
β”‚       β”œβ”€β”€ Components/          # Komponen UI (DemoModeBanner, Modal, dll)
β”‚       β”œβ”€β”€ Layouts/             # Layout Dashboard (AdminLayout)
β”‚       └── Pages/               # Halaman UI (POS, Kds, Products, Tables, Opnames)

πŸ’» Panduan Instalasi Lokal di Windows (Non-Docker)

Tahap 1: Prasyarat Software

Tahap 2: Langkah Instalasi

  1. Clone / Download Source Code:

    git clone <repository-url> cafepos
    cd cafepos
  2. Salin Konfigurasi Environment:

    cp .env.example .env
  3. Setup Database di File .env:
    Buat database MySQL baru bernama cafepos, lalu sesuaikan parameter koneksi di file .env:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=cafepos
    DB_USERNAME=root
    DB_PASSWORD=password_mysql_anda
  4. Instal Dependensi & Generate Key:

    composer install
    npm install
    php artisan key:generate
  5. Migrasi Tabel & Seeder:
    CafePOS menyediakan pemisah seeder yang jelas untuk kebutuhan rilis produksi (bersih tanpa data dummy) maupun demo (lengkap dengan data penjualan). Jalankan perintah berikut:

    A. Untuk Lingkungan Demo / Development (Dengan Data Simulasi Lengkap):

    # Migrasi database dan isi konfigurasi dasar + data demo lengkap
    php artisan migrate:fresh --seed
    
    # Isi database dengan Dummy Data Cafe & Logistik lengkap
    php artisan db:seed --class=CafePOSDummySeeder
    php artisan db:seed --class=CompletePhasesSeeder

    B. Untuk Lingkungan Production (Sistem Bersih Siap Pakai):

    # Migrasi database kosong
    php artisan migrate:fresh
    
    # Isi konfigurasi dasar aplikasi, peran/hak akses, dan menu sidebar
    php artisan db:seed --class=ProductionSeeder
  6. Jalankan Server Lokal:
    Jalankan server Laravel backend dan Vite compiler frontend secara bersamaan:

    • Terminal 1: php artisan serve
    • Terminal 2: npm run dev
      Akses aplikasi melalui browser di: http://127.0.0.1:8000

🐳 Panduan Deployment Menggunakan Docker

Sistem orkestrasi Docker Compose CafePOS telah dikonfigurasi lengkap untuk siap di-deploy pada server Linux VPS Ubuntu produksi menggunakan container Nginx + PHP-FPM + MySQL + Redis.

Cara Deploy Cepat:

  1. Clone Project atau Upload Folder ke Server:
    git clone <repository-url> /var/www/cafepos
    cd /var/www/cafepos
  2. Buat File Environment Produksi:
    cp .env.example .env
    nano .env
    Atur APP_ENV=production, APP_DEBUG=false, DB_CONNECTION=mysql, DB_HOST=mysql, dan atur password database MySQL yang aman.
  3. Bangun Container (Multi-stage Node & PHP Build):
    docker compose -f docker-compose.prod.yml up -d --build
  4. Inisialisasi Laravel Dalam Container:
    docker compose -f docker-compose.prod.yml exec app php artisan key:generate
    docker compose -f docker-compose.prod.yml exec app php artisan migrate --force
    docker compose -f docker-compose.prod.yml exec app php artisan db:seed --force
    docker compose -f docker-compose.prod.yml exec app php artisan storage:link
    
    # Caching optimasi rute & config
    docker compose -f docker-compose.prod.yml exec app php artisan config:cache
    docker compose -f docker-compose.prod.yml exec app php artisan route:cache
    docker compose -f docker-compose.prod.yml exec app php artisan view:cache

πŸ”‘ Modul Proteksi Lisensi

  1. Bypass Lisensi Otomatis (Local/Dev):
    Sistem verifikasi lisensi tidak akan aktif bila dijalankan di lingkungan pengembangan lokal:
    • .env diatur APP_ENV=local or APP_ENV=testing.
    • Host domain berupa: localhost, 127.0.0.1, IP private LAN (192.168.*, 10.*), domain .test atau .local.
  2. Kunci Lisensi Produksi:
    Di server produksi online, middleware license.verify akan mengunci sistem dan memaksa redirect ke /admin/license/activate sampai dimasukkan lisensi valid. Lisensi terikat pada APP_KEY. Jangan men-generate ulang APP_KEY setelah melakukan aktivasi lisensi.

πŸ”‘ Akun Uji Coba (Credentials)

Gunakan akun di bawah ini untuk menguji hak akses RBAC CafePOS di localhost atau server demo (berlaku bila menjalankan seeder demo):

Role Peran Email Login Password Penugasan Cabang
Super Admin superadmin@example.com password Semua Outlet Cabang
Admin User admin@example.com password Semua Outlet Cabang
Owner User owner@example.com password Semua Outlet Cabang
Kasir Kemang cashier@example.com password Dibatasi ke Outlet Kemang
Kasir Senopati cashier2@example.com password Dibatasi ke Outlet Senopati
Kitchen Staff Kemang kitchen@example.com password Dibatasi ke Dapur Kemang

Developed with ❀️ for Cafe & Restaurant Owners. Copyright © 2026. All rights reserved.